#include <bits/stdc++.h>
using namespace std;

/*
2834. 找出美丽数组的最小和
已解答
中等
相关标签
相关企业
提示
给你两个正整数：n 和 target 。

如果数组 nums 满足下述条件，则称其为 美丽数组 。

nums.length == n.
nums 由两两互不相同的正整数组成。
在范围 [0, n-1] 内，不存在 两个 不同 下标 i 和 j ，使得 nums[i] + nums[j] == target 。
返回符合条件的美丽数组所可能具备的 最小 和，并对结果进行取模 109 + 7。

 

示例 1：

输入：n = 2, target = 3
输出：4
解释：nums = [1,3] 是美丽数组。
- nums 的长度为 n = 2 。
- nums 由两两互不相同的正整数组成。
- 不存在两个不同下标 i 和 j ，使得 nums[i] + nums[j] == 3 。
可以证明 4 是符合条件的美丽数组所可能具备的最小和。
示例 2：

输入：n = 3, target = 3
输出：8
解释：
nums = [1,3,4] 是美丽数组。 
- nums 的长度为 n = 3 。 
- nums 由两两互不相同的正整数组成。 
- 不存在两个不同下标 i 和 j ，使得 nums[i] + nums[j] == 3 。
可以证明 8 是符合条件的美丽数组所可能具备的最小和。
示例 3：

输入：n = 1, target = 1
输出：1
解释：nums = [1] 是美丽数组。
 

提示：

1 <= n <= 109
1 <= target <= 109
*/

// 法一
class Solution {
public:
    vector<int> rowAndMaximumOnes(vector<vector<int>>& mat) {
        int maxOnes = 0;   // 记录最多的 1 的数量
        int rowIndex = -1; // 记录最多 1 的行的下标

        // 遍历每一行
        for (int i = 0; i < mat.size(); ++i) {
            // 计算当前行中 1 的数量
            int onesCount = 0;
            for (int j = 0; j < mat[i].size(); ++j) {
                onesCount += mat[i][j]; // mat[i][j] 只有 0 或 1
            }
            
            // 如果当前行的 1 的数量更多，更新最大值
            if (onesCount > maxOnes) {
                maxOnes = onesCount;
                rowIndex = i;
            }
        }

        // 如果没有找到 1 的行，默认返回 [0, 0]
        if (rowIndex == -1) {
            return {0, 0};
        }

        return {rowIndex, maxOnes};
    }
};
